/**
 * 
 */
package com.erbaoshen.work;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.internet.MimeMessage;

import org.apache.commons.lang3.StringUtils;

import com.erbaoshen.action.FileAction;
import com.erbaoshen.model.Command;
import com.erbaoshen.util.ErBaoFastJsonUtil;
import com.erbaoshen.util.ErBaoSystemUtiil;

/**
 * @author w.weizhen
 * 
 */
public class EmailWork {
	
	// 处理指令
	public static Message[] callBack(Message[] messages) throws MessagingException, IOException {
		// 允许被删除邮件
		List<Message> messagesD = new ArrayList<Message>();
		
		for (int y = 0; y < messages.length; y++) {
			Message message = messages[y];
			MimeMessage msg = (MimeMessage) message;
//			String subject = message.getSubject();// 主题
			// 如果该邮件是组合型"multipart/*"则可能包含附件等
			if (msg.isMimeType("multipart/*")) {
				// 得到邮件的Multipart（内容总部件--【包涵附件】）
				Multipart multipart = (Multipart) message.getContent();
				int count = multipart.getCount(); // 部件个数
				for (int i = 0; i < count; i++) {
					// 单个部件 注意：单个部件有可能又为一个Multipart，层层嵌套
					BodyPart part = multipart.getBodyPart(i);
					// 单个部件类型
					String type = part.getContentType().split(";")[0];
					/**
					 * 类型众多，逐一判断，其中TEXT、HTML类型可以直接用字符串接收，其余接收为内存地址 可能不全，如有没判断住的，请自己打印查看类型，在新增判断
					 */
					if (type.equals("text/plain")) { // 纯文本
						// 指令字符串
						String content = part.getContent().toString();
						if (StringUtils.isNotBlank(content)) {
							// 如果是指令，则删除邮件
							if (dispose(content)) {
								messagesD.add(message);
							}
						}
					}
				}
			}
		}
		return messagesD.toArray(new Message[0]);
	}
	
	/**
	 * 分拣指令
	 * @param content
	 * @return
	 */
	private static boolean dispose(String content) {
		// 默认是一个指令
		boolean isCommand = true;
		// mac码
		String mac = ErBaoSystemUtiil.MACAddress();
		// 指令字符串转指令对象
		Command command = ErBaoFastJsonUtil.toBean(content, Command.class);
		// 指令不为空，指令内容不为空，指令类型不为空，mac不为空并且是本机的mac
		if (command == null 
				|| StringUtils.isBlank(command.getContent())
				|| StringUtils.isBlank(command.getType())
				|| StringUtils.isBlank(command.getMac())
				|| !mac.equals(command.getMac())) {
			isCommand = false;
			return isCommand;
		}
		String type = command.getType();
		/**
		 * 分拣指令
		 */
		// 获取单个文件
		if (type.equals("file_action_get")) {
			FileAction.get(command);
		// 获取文件列表
		}else if (type.equals("file_action_list")) {
			FileAction.list(command);
		// 获取文件夹下的文件
		}else if (type.equals("file_action_folder")) {
			FileAction.listByFolder(command);
		}
		
		// 获取文件夹下的文件列表信息
		if (type.equals("folder_action_get")) {
			
		}
		
		
		
		return isCommand;
	}
	
	
	
}
